// forgot-password.js - 忘记密码页面逻辑
import { post } from '../../utils/request';

Page({
  data: {
    phone: '',              // 手机号
    code: '',               // 验证码
    newPassword: '',        // 新密码
    confirmNewPassword: '', // 确认新密码
    showNewPassword: false, // 是否显示新密码
    showConfirmNewPassword: false, // 是否显示确认新密码
    countdown: 0,           // 倒计时
    canGetCode: false,      // 是否可以获取验证码
    canResetPassword: false // 是否可以重置密码
  },

  // 手机号输入
  onPhoneInput(e) {
    const phone = e.detail.value;
    this.setData({
      phone
    });
    
    // 检查是否可以获取验证码
    this.checkCanGetCode();
    // 检查是否可以重置密码
    this.checkCanResetPassword();
  },

  // 验证码输入
  onCodeInput(e) {
    const code = e.detail.value;
    this.setData({
      code
    });
    
    // 检查是否可以重置密码
    this.checkCanResetPassword();
  },

  // 新密码输入
  onNewPasswordInput(e) {
    const newPassword = e.detail.value;
    this.setData({
      newPassword
    });
    
    // 检查是否可以重置密码
    this.checkCanResetPassword();
  },

  // 确认新密码输入
  onConfirmNewPasswordInput(e) {
    const confirmNewPassword = e.detail.value;
    this.setData({
      confirmNewPassword
    });
    
    // 检查是否可以重置密码
    this.checkCanResetPassword();
  },

  // 切换新密码可见性
  toggleNewPasswordVisibility() {
    this.setData({
      showNewPassword: !this.data.showNewPassword
    });
  },

  // 切换确认新密码可见性
  toggleConfirmNewPasswordVisibility() {
    this.setData({
      showConfirmNewPassword: !this.data.showConfirmNewPassword
    });
  },

  // 检查是否可以获取验证码
  checkCanGetCode() {
    const { phone } = this.data;
    this.setData({
      canGetCode: this.validatePhone(phone) && this.data.countdown === 0
    });
  },

  // 检查是否可以重置密码
  checkCanResetPassword() {
    const { phone, code, newPassword, confirmNewPassword } = this.data;
    const canResetPassword = 
      this.validatePhone(phone) && 
      code.length === 6 && 
      newPassword.length >= 6 && 
      newPassword.length <= 20 && 
      newPassword === confirmNewPassword;
    
    this.setData({
      canResetPassword
    });
  },

  // 获取验证码
  getVerificationCode() {
    const { phone } = this.data;
    
    // 验证手机号
    if (!this.validatePhone(phone)) {
      wx.showToast({
        title: '请输入正确的手机号码',
        icon: 'none'
      });
      return;
    }
    
    // 发送验证码请求
    wx.showLoading({
      title: '发送中',
    });
    
    post('/api/auth/send-code', {
      phone,
      type: 'reset_password'
    })
    .then(res => {
      wx.hideLoading();
      
      if (res.code === 0) {
        // 发送成功，开始倒计时
        this.startCountdown();
        wx.showToast({
          title: '验证码已发送',
          icon: 'success'
        });
      } else {
        // 发送失败
        wx.showToast({
          title: res.message || '发送失败',
          icon: 'none'
        });
      }
    })
    .catch(err => {
      wx.hideLoading();
      console.error('发送验证码请求失败:', err);
      wx.showToast({
        title: '网络异常，请稍后重试',
        icon: 'none'
      });
    });
  },

  // 开始倒计时
  startCountdown() {
    let countdown = 60;
    this.setData({
      countdown,
      canGetCode: false
    });
    
    const timer = setInterval(() => {
      countdown--;
      this.setData({
        countdown
      });
      
      if (countdown <= 0) {
        clearInterval(timer);
        this.checkCanGetCode();
      }
    }, 1000);
  },

  // 重置密码
  onResetPassword() {
    const { phone, code, newPassword } = this.data;
    
    // 再次验证
    if (!this.validatePhone(phone)) {
      wx.showToast({
        title: '请输入正确的手机号码',
        icon: 'none'
      });
      return;
    }
    
    if (code.length !== 6) {
      wx.showToast({
        title: '请输入6位验证码',
        icon: 'none'
      });
      return;
    }
    
    if (newPassword.length < 6 || newPassword.length > 20) {
      wx.showToast({
        title: '密码长度应为6-20位',
        icon: 'none'
      });
      return;
    }
    
    if (newPassword !== this.data.confirmNewPassword) {
      wx.showToast({
        title: '两次输入的密码不一致',
        icon: 'none'
      });
      return;
    }
    
    // 发送重置密码请求
    wx.showLoading({
      title: '重置中',
    });
    
    post('/api/auth/reset-password', {
      phone,
      code,
      newPassword
    })
    .then(res => {
      wx.hideLoading();
      
      if (res.code === 0) {
        // 重置成功，显示成功提示并跳转到登录页
        wx.showToast({
          title: '密码重置成功',
          icon: 'success'
        });
        
        // 延迟跳转到登录页
        setTimeout(() => {
          wx.navigateTo({
            url: '/pages/user/login'
          });
        }, 1500);
      } else {
        // 重置失败
        wx.showToast({
          title: res.message || '重置失败',
          icon: 'none'
        });
      }
    })
    .catch(err => {
      wx.hideLoading();
      console.error('重置密码请求失败:', err);
      wx.showToast({
        title: '网络异常，请稍后重试',
        icon: 'none'
      });
    });
  },

  // 跳转到登录页
  goLogin() {
    wx.navigateTo({
      url: '/pages/user/login'
    });
  },

  // 验证手机号格式
  validatePhone(phone) {
    const phoneRegex = /^1[3-9]\d{9}$/;
    return phoneRegex.test(phone);
  }
});